import java.util.Scanner;

class Solution1 {
    public int findSubstringInWraproundString(String s) {
        int n = s.length();
        int[] dp = new int[n];
        for (int i = 0; i < n; i++) {
            dp[i] = 1;
        }
        for (int i = 1; i < n; i++) {
            if ((s.charAt(i - 1) + 1 == s.charAt(i)) ||
                    (s.charAt(i - 1) == 'z' && s.charAt(i) == 'a')) {
                dp[i] = dp[i - 1] + 1;
            }
        }
        int[] hash = new int[26];
        for (int i = 0; i < n; i++) {
            char ch = s.charAt(i);
            hash[ch - 'a'] = Math.max(hash[ch - 'a'], dp[i]);
        }
        int ret = 0;
        for (int i = 0; i < 26; i++) {
            ret += hash[i];
        }
        return ret;
    }
}

class Solution2 {
    public int lengthOfLIS(int[] nums) {
        int n = nums.length;
        int[] dp = new int[n];
        for (int i = 0; i < n; i++) {
            dp[i] = 1;
        }
        for (int i = 1; i < n; i++) {
            for (int j = 0; j < i; j++) {
                if(nums[j] < nums[i]) {
                    dp[i] = Math.max(dp[i], dp[j] + 1);
                }
            }
        }

        int ret = dp[0];
        for (int i = 0; i < n; i++) {
            ret = Math.max(ret,dp[i]);
        }

        return ret;
    }
}

class Solution3 {
    public int removeElement(int[] nums, int val) {
        int n = nums.length;
        int i = 0, j = n-1;
        while(i<=j) {
            while(i<=j && nums[i] != val) {
                i++;
            }
            while(i<=j && nums[j] == val) {
                j--;
            }
            if(i<j) {
                int t = nums[i];
                nums[i] = nums[j];
                nums[j] = t;
            }
        }
        return i;
    }
}

class Solution4 {
    public int change(int n) {
        int sum = 0;
        while(n!=0) {
            int t = n%10;
            sum += t*t;
            n/=10;
        }
        return sum;
    }
    public boolean isHappy(int n) {
        int a = n, b = change(n);
        while(a!=b) {
            a = change(a);
            b = change(a);
            if(a == 1) {
                return true;
            }
        }
        return false;
    }
}

class Solution {
    public boolean isUgly(int n) {
        if(n == 0) return false;
        while(n!=0) {
            if(n == 1) return true;
            if(n%2 != 0 && n%3!=0 && n%5 != 0) {
                return false;
            }
            if(n%2 == 0) n/=2;
            if(n%3 == 0) n/=3;
            if(n%5 == 0) n/=5;
        }
        return true;
    }
}

public class Test {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int n = scanner.nextInt();
        int m = scanner.nextInt();
        double sum = 0;
        for(int i = n; i<=m; i++) {
            sum += 1.0/i;
        }
        System.out.println(sum);
    }
    public static void main1(String[] args) {
        Double o1 = true ? new Integer(1) : new Double(2.0);
        Object o2;
        if(true){
            o2 = new Integer(1);
        }else{
            o2 = new Double(2.0);
        }
        System.out.print(o1);
        System.out.print(" ");
        System.out.print(o2);
    }
}

// 16 8 4 2 1
//00000000 00000000 00000000 00001110
//00000000 00000000 00000000 00000011
//00000000 00000000 00000000 00001101